home *** CD-ROM | disk | FTP | other *** search
- Program Make_Dark_Forces_GOB;
- type
- dirblock = record
- Offset, len : longint;
- filename : array[1..13] of byte;
- end;
-
- var
- dirblocks : array[1..1024] of dirblock;
- file1, file2 : file;
- buffer : array[0..32767] of byte;
- infile, outfile,lstfile : string;
- i : integer;
- directory : text;
- cnt, dirbegin : longint;
- result, direntry : word;
- b : array[1..13] of byte;
-
- begin
- if paramcount < 1 then
- begin
- writeLn('Usage: MAKE_GOB gobfile');
- halt;
- end;
- infile := paramstr(1);
- for i := 1 to length(infile) do
- infile[i] := upcase(infile[i]);
- if pos('.GOB', infile) = 0 then
- begin
- lstfile := infile + '.LST';
- infile := infile + '.GOB';
- end
- else
- begin
- lstfile := copy(infile, 1, length(infile) - 4) + '.LST';
- end;
- assign(file1, infile);
- rewrite(file1,1);
- b[1] := 71;
- b[2] := 79;
- b[3] := 66;
- b[4] := 10;
- blockwrite(file1,b,4,result);
- dirbegin := 0;
- blockwrite(file1,dirbegin,4,result);
- direntry := 0;
- assign(directory,lstfile);
- reset(directory);
- cnt := 0;
- while not eof (directory) do
- begin
- readln(directory,outfile);
- writeln(outfile);
- assign(file2, outfile);
- reset(file2, 1);
- inc(direntry);
- dirblocks[direntry].Offset := filepos(file1);
- dirblocks[direntry].len := filesize(file2);
- for i := 1 to 13 do
- if i <= length(outfile) then
- dirblocks[direntry].filename[i] := ord(outfile[i])
- else
- dirblocks[direntry].filename[i] := 0;
- inc(cnt);
- while not eof(file2) do
- begin
- blockread(file2, buffer, 32768, result);
- blockwrite(file1, buffer, result, result);
- end;
- close(file2);
- end;
- dirbegin := filepos(file1);
- blockwrite(file1,cnt,4,result);
- seek(file1,4);
- blockwrite(file1,dirbegin,4,result);
- seek(file1,dirbegin+4);
- for direntry := 1 to cnt do
- blockwrite(file1,dirblocks[direntry],21,result);
- close(file1);
- close(directory);
- end.
-
-